/******************************************************************
			回调例子理解
			
			
			*回调可以简单粗暴地理解为函数指针作为输入参数
*******************************************************************/
#include <stdio.h>

typedef int(*FUNCTION)(int);

//g为施法者,f1,f2,f3为技能,n为技能强度.技能强度影响技能效果
int g(int n, FUNCTION f){
    int i = 0;
    int ret = 0;   
    for(i=1; i<=n; i++)
    {
        ret += i*f(i);
    }
    return ret;
}

int f1(int x){
    return x + 1;
}

int f2(int x){
    return 2*x - 1;
}

int f3(int x){
    return -x;
}

int main()
{
    printf("x * f1(x): %d\n", g(3, f1)); //小明使用了level3的f1技能
	printf("x * f1(x): %d\n", g(1, f1)); //小明使用了level1的f1技能
    printf("x * f2(x): %d\n", g(2, f2)); //小明使用了level2的f2技能
    printf("x * f3(x): %d\n", g(3, f3)); //小明使用了level3的f3技能
}

